import java.util.ArrayList;
import java.util.List;

import static com.sun.javafx.util.Utils.split;

public class MyString {

    /**
     *实现方法 compareTo, 能够实现按照字典序比较字符串大小
     */
    public static int myCompareTo(String str1,String str2){
        if(str1 == null || str1.isEmpty() || str2 == null || str2.isEmpty()){
            //边界条件
            return -1;
        }
        int str1Len = str1.length();
        int str2Len = str2.length();
        char[] str1Array = str1.toCharArray();
        char[] str2Array = str2.toCharArray();
        for (int i = 0; i < str1Len && i < str2Len; i++) {
            if(str1Array[i] == str2Array[i]){
                continue;
            }else {
                return str1Array[i] - str2Array[i];
            }
        }
        if (str1Len == str2Len){
            return 0;
        }else if(str1Len < str2Len){
            return -1;
        }else {
            return 0;
        }
    }
    public static void main(String[] args) {
        String str1 = "西安财经大小@信息学院@计本1902班@刘思佳";
        String str2 = "西安财经大小@信息学院@计本1904班@刘思佳";
        System.out.println(str1.compareTo(str2));
        System.out.println(myCompareTo(str1,str2));
    }
    /**
     *实现方法 contains, 能够判定字符串中是否包含子串
     */
    public static boolean myContains(String str,String dst){
        if(str == null || str.isEmpty() || dst == null || dst.isEmpty()){
            //边界条件
            return false;
        }
        int strLen = str.length();
        int dstLen = dst.length();
        char[] strArray = str.toCharArray();
        char[] dstArray = dst.toCharArray();
        for (int i = 0; i < strLen; i++) {
            if(strArray[i] == dstArray[0] && (i + dstLen) <= strLen){
                String tmp = str.substring(i,i+dstLen);
                if(tmp.equals(dst));
                return true;
            }
        }
        return false;
    }
//    public static void main(String[] args) {
//        String str1 = "西安财经大小@信息学院@计本1902班@刘思佳";
//        System.out.println(str1.contains("刘思佳"));
//        System.out.println(myContains(str1,"刘思佳"));
//        //System.out.println(s2);
//    }

    /**
     * 给出作为参数传递的当前字符串中字符串首次出现的位置。 如果找不到该字符串，则返回-1。
     */
    public static int myIndexOf(String str,String dst){
        if(str == null || str.isEmpty() || dst == null || dst.isEmpty()){
            //边界条件
            return -1;
        }
        if(str.equals(dst)){
            //完全相等的情况
            return 0;
        }
        int strLen = str.length();
        int dstLen = dst.length();
        char[] strArray = str.toCharArray();
        char[] dstArray = dst.toCharArray();

        for (int i = 0; i < strLen; i++) {
            if(strArray[i] == dstArray[0] && (i + dstLen) <= strLen){
                String tmp = str.substring(i, i+ dstLen);
                if (tmp.equals(dst)){
                    return i;
                }
            }
        }
        return -1;
    }
//    public static void main(String[] args) {
//        String str1 = "西安财经大小@信息学院@计本1903班@刘思佳";
//        int s1 = str1.indexOf("刘思佳");
//        int s2 = myIndexOf(str1,"刘思佳");
//        System.out.println(s1);
//        System.out.println(s2);
//    }

    /**
     * String类实现replace() 方法主要是用先匹配子串内容是否在目标串中出现，若出现将其修改为自定义的字符串。
     */
    public static String myReplace(String str ,String target,String replacement){
        String result = "";  //定义返回值(接收)
        int index = 0;     //记录更新位置
        boolean count = true;   //标志位
        for (int i = 0; i < str.length(); i++) {
            if(i + target.length() <= str.length() && target.equals(str.substring(i,i+target.length()))){
                //找target串
                if(count){
                    result += str.substring(0,i) + replacement;  //第一次链接
                    index = i + target.length();  //更新
                    count = false; //更新
                }else {
                    result += str.substring(index,i) + replacement;
                    index = i + target.length();
                }
            }
        }
        if(index < str.length()){
            result += str.substring(index,str.length());  //将最后一个分隔符之后的链接上来
        }
        return result;
    }

//    public static void main(String[] args) {
//        String str1 = "西安财经大小@信息学院@计本1903班@刘思佳";
//        String s1 = myReplace(str1,"@"," ");
//        String s2 = str1.replace("@"," ");
//        System.out.println(s1);
//        System.out.println(s2);
//    }

    /**
     * String的split()方法用于按传入的字符或字符串对String进行拆分，返回拆分之后的数组。
     */
    public static String[] mySplit(String str,String separator) {
        if (str == null || str.isEmpty()) {
            return null;
        }
        List<String> result = new ArrayList<String>();
        while (str.contains(separator)) {  //找到str中的separator
            int index = str.indexOf(separator); //记录下标
            String tmp = str.substring(0, index);  //分割字符串
            result.add(tmp);                     //把分割好的字符串存放到字符数组
            str = str.substring(index + separator.length());   //更新位置
        }
        result.add(str); //把最后的字符串链接
        String arr[] = new String[result.toArray().length];
        for (int i = 0; i < result.toArray().length; i++) {
            arr[i] = result.get(i);
        }
        return arr;
    }
//    public static void main(String[] args) {
//        String str1 = "西安财经大小@信息学院@计本1902班@刘思佳";
//        String[] s2 = split(str1,"@");
//        String[] s1 = mySplit(str1,"@");
//        print(s2);
//        System.out.println();
//        System.out.println("====================================");
//        print(s1);
//    }
//    public static void print(String[] str){
//        for (String a:
//             str) {
//            System.out.print(a);
//            System.out.print(" ");
//    }
}
